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 14c5f01b2fSopenharmony_ci#include <fstream> 15c5f01b2fSopenharmony_ci#include <sstream> 16c5f01b2fSopenharmony_ci#include "make_test_data_available.hpp" 17c5f01b2fSopenharmony_ci 18c5f01b2fSopenharmony_ciTEST_CASE("object inspection") 19c5f01b2fSopenharmony_ci{ 20c5f01b2fSopenharmony_ci SECTION("convenience type checker") 21c5f01b2fSopenharmony_ci { 22c5f01b2fSopenharmony_ci SECTION("object") 23c5f01b2fSopenharmony_ci { 24c5f01b2fSopenharmony_ci json j {{"foo", 1}, {"bar", false}}; 25c5f01b2fSopenharmony_ci CHECK(!j.is_null()); 26c5f01b2fSopenharmony_ci CHECK(!j.is_boolean()); 27c5f01b2fSopenharmony_ci CHECK(!j.is_number()); 28c5f01b2fSopenharmony_ci CHECK(!j.is_number_integer()); 29c5f01b2fSopenharmony_ci CHECK(!j.is_number_unsigned()); 30c5f01b2fSopenharmony_ci CHECK(!j.is_number_float()); 31c5f01b2fSopenharmony_ci CHECK(!j.is_binary()); 32c5f01b2fSopenharmony_ci CHECK(j.is_object()); 33c5f01b2fSopenharmony_ci CHECK(!j.is_array()); 34c5f01b2fSopenharmony_ci CHECK(!j.is_string()); 35c5f01b2fSopenharmony_ci CHECK(!j.is_discarded()); 36c5f01b2fSopenharmony_ci CHECK(!j.is_primitive()); 37c5f01b2fSopenharmony_ci CHECK(j.is_structured()); 38c5f01b2fSopenharmony_ci } 39c5f01b2fSopenharmony_ci 40c5f01b2fSopenharmony_ci SECTION("array") 41c5f01b2fSopenharmony_ci { 42c5f01b2fSopenharmony_ci json j {"foo", 1, 1u, 42.23, false}; 43c5f01b2fSopenharmony_ci CHECK(!j.is_null()); 44c5f01b2fSopenharmony_ci CHECK(!j.is_boolean()); 45c5f01b2fSopenharmony_ci CHECK(!j.is_number()); 46c5f01b2fSopenharmony_ci CHECK(!j.is_number_integer()); 47c5f01b2fSopenharmony_ci CHECK(!j.is_number_unsigned()); 48c5f01b2fSopenharmony_ci CHECK(!j.is_number_float()); 49c5f01b2fSopenharmony_ci CHECK(!j.is_binary()); 50c5f01b2fSopenharmony_ci CHECK(!j.is_object()); 51c5f01b2fSopenharmony_ci CHECK(j.is_array()); 52c5f01b2fSopenharmony_ci CHECK(!j.is_string()); 53c5f01b2fSopenharmony_ci CHECK(!j.is_discarded()); 54c5f01b2fSopenharmony_ci CHECK(!j.is_primitive()); 55c5f01b2fSopenharmony_ci CHECK(j.is_structured()); 56c5f01b2fSopenharmony_ci } 57c5f01b2fSopenharmony_ci 58c5f01b2fSopenharmony_ci SECTION("null") 59c5f01b2fSopenharmony_ci { 60c5f01b2fSopenharmony_ci json j(nullptr); 61c5f01b2fSopenharmony_ci CHECK(j.is_null()); 62c5f01b2fSopenharmony_ci CHECK(!j.is_boolean()); 63c5f01b2fSopenharmony_ci CHECK(!j.is_number()); 64c5f01b2fSopenharmony_ci CHECK(!j.is_number_integer()); 65c5f01b2fSopenharmony_ci CHECK(!j.is_number_unsigned()); 66c5f01b2fSopenharmony_ci CHECK(!j.is_number_float()); 67c5f01b2fSopenharmony_ci CHECK(!j.is_binary()); 68c5f01b2fSopenharmony_ci CHECK(!j.is_object()); 69c5f01b2fSopenharmony_ci CHECK(!j.is_array()); 70c5f01b2fSopenharmony_ci CHECK(!j.is_string()); 71c5f01b2fSopenharmony_ci CHECK(!j.is_discarded()); 72c5f01b2fSopenharmony_ci CHECK(j.is_primitive()); 73c5f01b2fSopenharmony_ci CHECK(!j.is_structured()); 74c5f01b2fSopenharmony_ci } 75c5f01b2fSopenharmony_ci 76c5f01b2fSopenharmony_ci SECTION("boolean") 77c5f01b2fSopenharmony_ci { 78c5f01b2fSopenharmony_ci json j(true); 79c5f01b2fSopenharmony_ci CHECK(!j.is_null()); 80c5f01b2fSopenharmony_ci CHECK(j.is_boolean()); 81c5f01b2fSopenharmony_ci CHECK(!j.is_number()); 82c5f01b2fSopenharmony_ci CHECK(!j.is_number_integer()); 83c5f01b2fSopenharmony_ci CHECK(!j.is_number_unsigned()); 84c5f01b2fSopenharmony_ci CHECK(!j.is_number_float()); 85c5f01b2fSopenharmony_ci CHECK(!j.is_binary()); 86c5f01b2fSopenharmony_ci CHECK(!j.is_object()); 87c5f01b2fSopenharmony_ci CHECK(!j.is_array()); 88c5f01b2fSopenharmony_ci CHECK(!j.is_string()); 89c5f01b2fSopenharmony_ci CHECK(!j.is_discarded()); 90c5f01b2fSopenharmony_ci CHECK(j.is_primitive()); 91c5f01b2fSopenharmony_ci CHECK(!j.is_structured()); 92c5f01b2fSopenharmony_ci } 93c5f01b2fSopenharmony_ci 94c5f01b2fSopenharmony_ci SECTION("string") 95c5f01b2fSopenharmony_ci { 96c5f01b2fSopenharmony_ci json j("Hello world"); 97c5f01b2fSopenharmony_ci CHECK(!j.is_null()); 98c5f01b2fSopenharmony_ci CHECK(!j.is_boolean()); 99c5f01b2fSopenharmony_ci CHECK(!j.is_number()); 100c5f01b2fSopenharmony_ci CHECK(!j.is_number_integer()); 101c5f01b2fSopenharmony_ci CHECK(!j.is_number_unsigned()); 102c5f01b2fSopenharmony_ci CHECK(!j.is_number_float()); 103c5f01b2fSopenharmony_ci CHECK(!j.is_binary()); 104c5f01b2fSopenharmony_ci CHECK(!j.is_object()); 105c5f01b2fSopenharmony_ci CHECK(!j.is_array()); 106c5f01b2fSopenharmony_ci CHECK(j.is_string()); 107c5f01b2fSopenharmony_ci CHECK(!j.is_discarded()); 108c5f01b2fSopenharmony_ci CHECK(j.is_primitive()); 109c5f01b2fSopenharmony_ci CHECK(!j.is_structured()); 110c5f01b2fSopenharmony_ci } 111c5f01b2fSopenharmony_ci 112c5f01b2fSopenharmony_ci SECTION("number (integer)") 113c5f01b2fSopenharmony_ci { 114c5f01b2fSopenharmony_ci json j(42); 115c5f01b2fSopenharmony_ci CHECK(!j.is_null()); 116c5f01b2fSopenharmony_ci CHECK(!j.is_boolean()); 117c5f01b2fSopenharmony_ci CHECK(j.is_number()); 118c5f01b2fSopenharmony_ci CHECK(j.is_number_integer()); 119c5f01b2fSopenharmony_ci CHECK(!j.is_number_unsigned()); 120c5f01b2fSopenharmony_ci CHECK(!j.is_number_float()); 121c5f01b2fSopenharmony_ci CHECK(!j.is_binary()); 122c5f01b2fSopenharmony_ci CHECK(!j.is_object()); 123c5f01b2fSopenharmony_ci CHECK(!j.is_array()); 124c5f01b2fSopenharmony_ci CHECK(!j.is_string()); 125c5f01b2fSopenharmony_ci CHECK(!j.is_discarded()); 126c5f01b2fSopenharmony_ci CHECK(j.is_primitive()); 127c5f01b2fSopenharmony_ci CHECK(!j.is_structured()); 128c5f01b2fSopenharmony_ci } 129c5f01b2fSopenharmony_ci 130c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 131c5f01b2fSopenharmony_ci { 132c5f01b2fSopenharmony_ci json j(42u); 133c5f01b2fSopenharmony_ci CHECK(!j.is_null()); 134c5f01b2fSopenharmony_ci CHECK(!j.is_boolean()); 135c5f01b2fSopenharmony_ci CHECK(j.is_number()); 136c5f01b2fSopenharmony_ci CHECK(j.is_number_integer()); 137c5f01b2fSopenharmony_ci CHECK(j.is_number_unsigned()); 138c5f01b2fSopenharmony_ci CHECK(!j.is_number_float()); 139c5f01b2fSopenharmony_ci CHECK(!j.is_binary()); 140c5f01b2fSopenharmony_ci CHECK(!j.is_object()); 141c5f01b2fSopenharmony_ci CHECK(!j.is_array()); 142c5f01b2fSopenharmony_ci CHECK(!j.is_string()); 143c5f01b2fSopenharmony_ci CHECK(!j.is_discarded()); 144c5f01b2fSopenharmony_ci CHECK(j.is_primitive()); 145c5f01b2fSopenharmony_ci CHECK(!j.is_structured()); 146c5f01b2fSopenharmony_ci } 147c5f01b2fSopenharmony_ci 148c5f01b2fSopenharmony_ci SECTION("number (floating-point)") 149c5f01b2fSopenharmony_ci { 150c5f01b2fSopenharmony_ci json j(42.23); 151c5f01b2fSopenharmony_ci CHECK(!j.is_null()); 152c5f01b2fSopenharmony_ci CHECK(!j.is_boolean()); 153c5f01b2fSopenharmony_ci CHECK(j.is_number()); 154c5f01b2fSopenharmony_ci CHECK(!j.is_number_integer()); 155c5f01b2fSopenharmony_ci CHECK(!j.is_number_unsigned()); 156c5f01b2fSopenharmony_ci CHECK(j.is_number_float()); 157c5f01b2fSopenharmony_ci CHECK(!j.is_binary()); 158c5f01b2fSopenharmony_ci CHECK(!j.is_object()); 159c5f01b2fSopenharmony_ci CHECK(!j.is_array()); 160c5f01b2fSopenharmony_ci CHECK(!j.is_string()); 161c5f01b2fSopenharmony_ci CHECK(!j.is_discarded()); 162c5f01b2fSopenharmony_ci CHECK(j.is_primitive()); 163c5f01b2fSopenharmony_ci CHECK(!j.is_structured()); 164c5f01b2fSopenharmony_ci } 165c5f01b2fSopenharmony_ci 166c5f01b2fSopenharmony_ci SECTION("binary") 167c5f01b2fSopenharmony_ci { 168c5f01b2fSopenharmony_ci json j(json::value_t::binary); 169c5f01b2fSopenharmony_ci CHECK(!j.is_null()); 170c5f01b2fSopenharmony_ci CHECK(!j.is_boolean()); 171c5f01b2fSopenharmony_ci CHECK(!j.is_number()); 172c5f01b2fSopenharmony_ci CHECK(!j.is_number_integer()); 173c5f01b2fSopenharmony_ci CHECK(!j.is_number_unsigned()); 174c5f01b2fSopenharmony_ci CHECK(!j.is_number_float()); 175c5f01b2fSopenharmony_ci CHECK(j.is_binary()); 176c5f01b2fSopenharmony_ci CHECK(!j.is_object()); 177c5f01b2fSopenharmony_ci CHECK(!j.is_array()); 178c5f01b2fSopenharmony_ci CHECK(!j.is_string()); 179c5f01b2fSopenharmony_ci CHECK(!j.is_discarded()); 180c5f01b2fSopenharmony_ci CHECK(j.is_primitive()); 181c5f01b2fSopenharmony_ci CHECK(!j.is_structured()); 182c5f01b2fSopenharmony_ci } 183c5f01b2fSopenharmony_ci 184c5f01b2fSopenharmony_ci SECTION("discarded") 185c5f01b2fSopenharmony_ci { 186c5f01b2fSopenharmony_ci json j(json::value_t::discarded); 187c5f01b2fSopenharmony_ci CHECK(!j.is_null()); 188c5f01b2fSopenharmony_ci CHECK(!j.is_boolean()); 189c5f01b2fSopenharmony_ci CHECK(!j.is_number()); 190c5f01b2fSopenharmony_ci CHECK(!j.is_number_integer()); 191c5f01b2fSopenharmony_ci CHECK(!j.is_number_unsigned()); 192c5f01b2fSopenharmony_ci CHECK(!j.is_number_float()); 193c5f01b2fSopenharmony_ci CHECK(!j.is_binary()); 194c5f01b2fSopenharmony_ci CHECK(!j.is_object()); 195c5f01b2fSopenharmony_ci CHECK(!j.is_array()); 196c5f01b2fSopenharmony_ci CHECK(!j.is_string()); 197c5f01b2fSopenharmony_ci CHECK(j.is_discarded()); 198c5f01b2fSopenharmony_ci CHECK(!j.is_primitive()); 199c5f01b2fSopenharmony_ci CHECK(!j.is_structured()); 200c5f01b2fSopenharmony_ci } 201c5f01b2fSopenharmony_ci } 202c5f01b2fSopenharmony_ci 203c5f01b2fSopenharmony_ci SECTION("serialization") 204c5f01b2fSopenharmony_ci { 205c5f01b2fSopenharmony_ci json j {{"object", json::object()}, {"array", {1, 2, 3, 4}}, {"number", 42}, {"boolean", false}, {"null", nullptr}, {"string", "Hello world"} }; 206c5f01b2fSopenharmony_ci 207c5f01b2fSopenharmony_ci SECTION("no indent / indent=-1") 208c5f01b2fSopenharmony_ci { 209c5f01b2fSopenharmony_ci CHECK(j.dump() == 210c5f01b2fSopenharmony_ci "{\"array\":[1,2,3,4],\"boolean\":false,\"null\":null,\"number\":42,\"object\":{},\"string\":\"Hello world\"}"); 211c5f01b2fSopenharmony_ci 212c5f01b2fSopenharmony_ci CHECK(j.dump() == j.dump(-1)); 213c5f01b2fSopenharmony_ci } 214c5f01b2fSopenharmony_ci 215c5f01b2fSopenharmony_ci SECTION("indent=0") 216c5f01b2fSopenharmony_ci { 217c5f01b2fSopenharmony_ci CHECK(j.dump(0) == 218c5f01b2fSopenharmony_ci "{\n\"array\": [\n1,\n2,\n3,\n4\n],\n\"boolean\": false,\n\"null\": null,\n\"number\": 42,\n\"object\": {},\n\"string\": \"Hello world\"\n}"); 219c5f01b2fSopenharmony_ci } 220c5f01b2fSopenharmony_ci 221c5f01b2fSopenharmony_ci SECTION("indent=1, space='\t'") 222c5f01b2fSopenharmony_ci { 223c5f01b2fSopenharmony_ci CHECK(j.dump(1, '\t') == 224c5f01b2fSopenharmony_ci "{\n\t\"array\": [\n\t\t1,\n\t\t2,\n\t\t3,\n\t\t4\n\t],\n\t\"boolean\": false,\n\t\"null\": null,\n\t\"number\": 42,\n\t\"object\": {},\n\t\"string\": \"Hello world\"\n}"); 225c5f01b2fSopenharmony_ci } 226c5f01b2fSopenharmony_ci 227c5f01b2fSopenharmony_ci SECTION("indent=4") 228c5f01b2fSopenharmony_ci { 229c5f01b2fSopenharmony_ci CHECK(j.dump(4) == 230c5f01b2fSopenharmony_ci "{\n \"array\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"boolean\": false,\n \"null\": null,\n \"number\": 42,\n \"object\": {},\n \"string\": \"Hello world\"\n}"); 231c5f01b2fSopenharmony_ci } 232c5f01b2fSopenharmony_ci 233c5f01b2fSopenharmony_ci SECTION("indent=x") 234c5f01b2fSopenharmony_ci { 235c5f01b2fSopenharmony_ci CHECK(j.dump().size() == 94); 236c5f01b2fSopenharmony_ci CHECK(j.dump(1).size() == 127); 237c5f01b2fSopenharmony_ci CHECK(j.dump(2).size() == 142); 238c5f01b2fSopenharmony_ci CHECK(j.dump(512).size() == 7792); 239c5f01b2fSopenharmony_ci 240c5f01b2fSopenharmony_ci // important test, because it yields a resize of the indent_string 241c5f01b2fSopenharmony_ci // inside the dump() function 242c5f01b2fSopenharmony_ci CHECK(j.dump(1024).size() == 15472); 243c5f01b2fSopenharmony_ci 244c5f01b2fSopenharmony_ci const auto binary = json::binary({1, 2, 3}, 128); 245c5f01b2fSopenharmony_ci CHECK(binary.dump(1024).size() == 2086); 246c5f01b2fSopenharmony_ci } 247c5f01b2fSopenharmony_ci 248c5f01b2fSopenharmony_ci SECTION("dump and floating-point numbers") 249c5f01b2fSopenharmony_ci { 250c5f01b2fSopenharmony_ci auto s = json(42.23).dump(); 251c5f01b2fSopenharmony_ci CHECK(s.find("42.23") != std::string::npos); 252c5f01b2fSopenharmony_ci } 253c5f01b2fSopenharmony_ci 254c5f01b2fSopenharmony_ci SECTION("dump and small floating-point numbers") 255c5f01b2fSopenharmony_ci { 256c5f01b2fSopenharmony_ci auto s = json(1.23456e-78).dump(); 257c5f01b2fSopenharmony_ci CHECK(s.find("1.23456e-78") != std::string::npos); 258c5f01b2fSopenharmony_ci } 259c5f01b2fSopenharmony_ci 260c5f01b2fSopenharmony_ci SECTION("dump and non-ASCII characters") 261c5f01b2fSopenharmony_ci { 262c5f01b2fSopenharmony_ci CHECK(json("ä").dump() == "\"ä\""); 263c5f01b2fSopenharmony_ci CHECK(json("Ö").dump() == "\"Ö\""); 264c5f01b2fSopenharmony_ci CHECK(json("❤️").dump() == "\"❤️\""); 265c5f01b2fSopenharmony_ci } 266c5f01b2fSopenharmony_ci 267c5f01b2fSopenharmony_ci SECTION("dump with ensure_ascii and non-ASCII characters") 268c5f01b2fSopenharmony_ci { 269c5f01b2fSopenharmony_ci CHECK(json("ä").dump(-1, ' ', true) == "\"\\u00e4\""); 270c5f01b2fSopenharmony_ci CHECK(json("Ö").dump(-1, ' ', true) == "\"\\u00d6\""); 271c5f01b2fSopenharmony_ci CHECK(json("❤️").dump(-1, ' ', true) == "\"\\u2764\\ufe0f\""); 272c5f01b2fSopenharmony_ci } 273c5f01b2fSopenharmony_ci 274c5f01b2fSopenharmony_ci SECTION("full Unicode escaping to ASCII") 275c5f01b2fSopenharmony_ci { 276c5f01b2fSopenharmony_ci SECTION("parsing yields the same JSON value") 277c5f01b2fSopenharmony_ci { 278c5f01b2fSopenharmony_ci std::ifstream f_escaped(TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode_ascii.json"); 279c5f01b2fSopenharmony_ci std::ifstream f_unescaped(TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode.json"); 280c5f01b2fSopenharmony_ci 281c5f01b2fSopenharmony_ci json j1 = json::parse(f_escaped); 282c5f01b2fSopenharmony_ci json j2 = json::parse(f_unescaped); 283c5f01b2fSopenharmony_ci CHECK(j1 == j2); 284c5f01b2fSopenharmony_ci } 285c5f01b2fSopenharmony_ci 286c5f01b2fSopenharmony_ci SECTION("dumping yields the same JSON text") 287c5f01b2fSopenharmony_ci { 288c5f01b2fSopenharmony_ci std::ifstream f_escaped(TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode_ascii.json"); 289c5f01b2fSopenharmony_ci std::ifstream f_unescaped(TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode.json"); 290c5f01b2fSopenharmony_ci 291c5f01b2fSopenharmony_ci json value = json::parse(f_unescaped); 292c5f01b2fSopenharmony_ci std::string text = value.dump(4, ' ', true); 293c5f01b2fSopenharmony_ci 294c5f01b2fSopenharmony_ci std::string expected((std::istreambuf_iterator<char>(f_escaped)), 295c5f01b2fSopenharmony_ci std::istreambuf_iterator<char>()); 296c5f01b2fSopenharmony_ci CHECK(text == expected); 297c5f01b2fSopenharmony_ci } 298c5f01b2fSopenharmony_ci } 299c5f01b2fSopenharmony_ci 300c5f01b2fSopenharmony_ci SECTION("serialization of discarded element") 301c5f01b2fSopenharmony_ci { 302c5f01b2fSopenharmony_ci json j_discarded(json::value_t::discarded); 303c5f01b2fSopenharmony_ci CHECK(j_discarded.dump() == "<discarded>"); 304c5f01b2fSopenharmony_ci } 305c5f01b2fSopenharmony_ci 306c5f01b2fSopenharmony_ci SECTION("check that precision is reset after serialization") 307c5f01b2fSopenharmony_ci { 308c5f01b2fSopenharmony_ci // create stringstream and set precision 309c5f01b2fSopenharmony_ci std::stringstream ss; 310c5f01b2fSopenharmony_ci ss.precision(3); 311c5f01b2fSopenharmony_ci ss << 3.141592653589793 << std::fixed; 312c5f01b2fSopenharmony_ci CHECK(ss.str() == "3.14"); 313c5f01b2fSopenharmony_ci 314c5f01b2fSopenharmony_ci // reset stringstream 315c5f01b2fSopenharmony_ci ss.str(std::string()); 316c5f01b2fSopenharmony_ci 317c5f01b2fSopenharmony_ci // use stringstream for JSON serialization 318c5f01b2fSopenharmony_ci json j_number = 3.14159265358979; 319c5f01b2fSopenharmony_ci ss << j_number; 320c5f01b2fSopenharmony_ci 321c5f01b2fSopenharmony_ci // check that precision has been overridden during serialization 322c5f01b2fSopenharmony_ci CHECK(ss.str() == "3.14159265358979"); 323c5f01b2fSopenharmony_ci 324c5f01b2fSopenharmony_ci // check that precision has been restored 325c5f01b2fSopenharmony_ci CHECK(ss.precision() == 3); 326c5f01b2fSopenharmony_ci } 327c5f01b2fSopenharmony_ci } 328c5f01b2fSopenharmony_ci 329c5f01b2fSopenharmony_ci SECTION("round trips") 330c5f01b2fSopenharmony_ci { 331c5f01b2fSopenharmony_ci for (const auto& s : 332c5f01b2fSopenharmony_ci {"3.141592653589793", "1000000000000000010E5" 333c5f01b2fSopenharmony_ci }) 334c5f01b2fSopenharmony_ci { 335c5f01b2fSopenharmony_ci json j1 = json::parse(s); 336c5f01b2fSopenharmony_ci std::string s1 = j1.dump(); 337c5f01b2fSopenharmony_ci json j2 = json::parse(s1); 338c5f01b2fSopenharmony_ci std::string s2 = j2.dump(); 339c5f01b2fSopenharmony_ci CHECK(s1 == s2); 340c5f01b2fSopenharmony_ci } 341c5f01b2fSopenharmony_ci } 342c5f01b2fSopenharmony_ci 343c5f01b2fSopenharmony_ci SECTION("return the type of the object (explicit)") 344c5f01b2fSopenharmony_ci { 345c5f01b2fSopenharmony_ci SECTION("null") 346c5f01b2fSopenharmony_ci { 347c5f01b2fSopenharmony_ci json j = nullptr; 348c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 349c5f01b2fSopenharmony_ci } 350c5f01b2fSopenharmony_ci 351c5f01b2fSopenharmony_ci SECTION("object") 352c5f01b2fSopenharmony_ci { 353c5f01b2fSopenharmony_ci json j = {{"foo", "bar"}}; 354c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::object); 355c5f01b2fSopenharmony_ci } 356c5f01b2fSopenharmony_ci 357c5f01b2fSopenharmony_ci SECTION("array") 358c5f01b2fSopenharmony_ci { 359c5f01b2fSopenharmony_ci json j = {1, 2, 3, 4}; 360c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::array); 361c5f01b2fSopenharmony_ci } 362c5f01b2fSopenharmony_ci 363c5f01b2fSopenharmony_ci SECTION("boolean") 364c5f01b2fSopenharmony_ci { 365c5f01b2fSopenharmony_ci json j = true; 366c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::boolean); 367c5f01b2fSopenharmony_ci } 368c5f01b2fSopenharmony_ci 369c5f01b2fSopenharmony_ci SECTION("string") 370c5f01b2fSopenharmony_ci { 371c5f01b2fSopenharmony_ci json j = "Hello world"; 372c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::string); 373c5f01b2fSopenharmony_ci } 374c5f01b2fSopenharmony_ci 375c5f01b2fSopenharmony_ci SECTION("number (integer)") 376c5f01b2fSopenharmony_ci { 377c5f01b2fSopenharmony_ci json j = 23; 378c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::number_integer); 379c5f01b2fSopenharmony_ci } 380c5f01b2fSopenharmony_ci 381c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 382c5f01b2fSopenharmony_ci { 383c5f01b2fSopenharmony_ci json j = 23u; 384c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::number_unsigned); 385c5f01b2fSopenharmony_ci } 386c5f01b2fSopenharmony_ci 387c5f01b2fSopenharmony_ci SECTION("number (floating-point)") 388c5f01b2fSopenharmony_ci { 389c5f01b2fSopenharmony_ci json j = 42.23; 390c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::number_float); 391c5f01b2fSopenharmony_ci } 392c5f01b2fSopenharmony_ci } 393c5f01b2fSopenharmony_ci 394c5f01b2fSopenharmony_ci SECTION("return the type of the object (implicit)") 395c5f01b2fSopenharmony_ci { 396c5f01b2fSopenharmony_ci SECTION("null") 397c5f01b2fSopenharmony_ci { 398c5f01b2fSopenharmony_ci json j = nullptr; 399c5f01b2fSopenharmony_ci json::value_t t = j; 400c5f01b2fSopenharmony_ci CHECK(t == j.type()); 401c5f01b2fSopenharmony_ci } 402c5f01b2fSopenharmony_ci 403c5f01b2fSopenharmony_ci SECTION("object") 404c5f01b2fSopenharmony_ci { 405c5f01b2fSopenharmony_ci json j = {{"foo", "bar"}}; 406c5f01b2fSopenharmony_ci json::value_t t = j; 407c5f01b2fSopenharmony_ci CHECK(t == j.type()); 408c5f01b2fSopenharmony_ci } 409c5f01b2fSopenharmony_ci 410c5f01b2fSopenharmony_ci SECTION("array") 411c5f01b2fSopenharmony_ci { 412c5f01b2fSopenharmony_ci json j = {1, 2, 3, 4}; 413c5f01b2fSopenharmony_ci json::value_t t = j; 414c5f01b2fSopenharmony_ci CHECK(t == j.type()); 415c5f01b2fSopenharmony_ci } 416c5f01b2fSopenharmony_ci 417c5f01b2fSopenharmony_ci SECTION("boolean") 418c5f01b2fSopenharmony_ci { 419c5f01b2fSopenharmony_ci json j = true; 420c5f01b2fSopenharmony_ci json::value_t t = j; 421c5f01b2fSopenharmony_ci CHECK(t == j.type()); 422c5f01b2fSopenharmony_ci } 423c5f01b2fSopenharmony_ci 424c5f01b2fSopenharmony_ci SECTION("string") 425c5f01b2fSopenharmony_ci { 426c5f01b2fSopenharmony_ci json j = "Hello world"; 427c5f01b2fSopenharmony_ci json::value_t t = j; 428c5f01b2fSopenharmony_ci CHECK(t == j.type()); 429c5f01b2fSopenharmony_ci } 430c5f01b2fSopenharmony_ci 431c5f01b2fSopenharmony_ci SECTION("number (integer)") 432c5f01b2fSopenharmony_ci { 433c5f01b2fSopenharmony_ci json j = 23; 434c5f01b2fSopenharmony_ci json::value_t t = j; 435c5f01b2fSopenharmony_ci CHECK(t == j.type()); 436c5f01b2fSopenharmony_ci } 437c5f01b2fSopenharmony_ci 438c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 439c5f01b2fSopenharmony_ci { 440c5f01b2fSopenharmony_ci json j = 23u; 441c5f01b2fSopenharmony_ci json::value_t t = j; 442c5f01b2fSopenharmony_ci CHECK(t == j.type()); 443c5f01b2fSopenharmony_ci } 444c5f01b2fSopenharmony_ci 445c5f01b2fSopenharmony_ci SECTION("number (floating-point)") 446c5f01b2fSopenharmony_ci { 447c5f01b2fSopenharmony_ci json j = 42.23; 448c5f01b2fSopenharmony_ci json::value_t t = j; 449c5f01b2fSopenharmony_ci CHECK(t == j.type()); 450c5f01b2fSopenharmony_ci } 451c5f01b2fSopenharmony_ci 452c5f01b2fSopenharmony_ci SECTION("binary") 453c5f01b2fSopenharmony_ci { 454c5f01b2fSopenharmony_ci json j = json::binary({}); 455c5f01b2fSopenharmony_ci json::value_t t = j; 456c5f01b2fSopenharmony_ci CHECK(t == j.type()); 457c5f01b2fSopenharmony_ci } 458c5f01b2fSopenharmony_ci } 459c5f01b2fSopenharmony_ci} 460