using nlohmann::json; void check_escaped(const char* original, const char* escaped = "", const bool ensure_ascii = false); void check_escaped(const char* original, const char* escaped, const bool ensure_ascii) { std::stringstream ss; json::serializer s(nlohmann::detail::output_adapter<char>(ss), ' '); s.dump_escaped(original, ensure_ascii); CHECK(ss.str() == escaped); } TEST_CASE("convenience functions") { SECTION("type name as string") { CHECK(std::string(json(json::value_t::null).type_name()) == "null"); CHECK(std::string(json(json::value_t::object).type_name()) == "object"); CHECK(std::string(json(json::value_t::array).type_name()) == "array"); CHECK(std::string(json(json::value_t::number_integer).type_name()) == "number"); CHECK(std::string(json(json::value_t::number_unsigned).type_name()) == "number"); CHECK(std::string(json(json::value_t::number_float).type_name()) == "number"); CHECK(std::string(json(json::value_t::boolean).type_name()) == "boolean"); CHECK(std::string(json(json::value_t::string).type_name()) == "string"); CHECK(std::string(json(json::value_t::discarded).type_name()) == "discarded"); } SECTION("string escape") { check_escaped("\"", "\\\""); check_escaped("\\", "\\\\"); check_escaped("\b", "\\b");
#include "json.hpp" using nlohmann::json; TEST_CASE("element access 1") { SECTION("array") { json j = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; const json j_const = j; SECTION("access specified element with bounds checking") { SECTION("access within bounds") { CHECK(j.at(0) == json(1)); CHECK(j.at(1) == json(1u)); CHECK(j.at(2) == json(true)); CHECK(j.at(3) == json(nullptr)); CHECK(j.at(4) == json("string")); CHECK(j.at(5) == json(42.23)); CHECK(j.at(6) == json(json::object())); CHECK(j.at(7) == json({1, 2, 3})); CHECK(j_const.at(0) == json(1)); CHECK(j_const.at(1) == json(1u)); CHECK(j_const.at(2) == json(true)); CHECK(j_const.at(3) == json(nullptr)); CHECK(j_const.at(4) == json("string")); CHECK(j_const.at(5) == json(42.23)); CHECK(j_const.at(6) == json(json::object()));
{ SECTION("get an object (explicit)") { json::object_t o_reference = {{"object", json::object()}, {"array", {1, 2, 3, 4}}, {"number", 42}, {"boolean", false}, {"null", nullptr}, {"string", "Hello world"} }; json j(o_reference); SECTION("json::object_t") { json::object_t o = j.get<json::object_t>(); CHECK(json(o) == j); } SECTION("std::map<json::string_t, json>") { std::map<json::string_t, json> o = j.get<std::map<json::string_t, json>>(); CHECK(json(o) == j); } SECTION("std::multimap<json::string_t, json>") { std::multimap<json::string_t, json> o = j.get<std::multimap<json::string_t, json>>(); CHECK(json(o) == j); }
#include <iostream> #include <valarray> TEST_CASE("deserialization") { SECTION("successful deserialization") { SECTION("stream") { std::stringstream ss1, ss2; ss1 << "[\"foo\",1,2,3,false,{\"one\":1}]"; ss2 << "[\"foo\",1,2,3,false,{\"one\":1}]"; json j = json::parse(ss1); CHECK(json::accept(ss2)); CHECK(j == json({"foo", 1, 2, 3, false, {{"one", 1}}})); } SECTION("string literal") { auto s = "[\"foo\",1,2,3,false,{\"one\":1}]"; json j = json::parse(s); CHECK(json::accept(s)); CHECK(j == json({"foo", 1, 2, 3, false, {{"one", 1}}})); } SECTION("string_t") { json::string_t s = "[\"foo\",1,2,3,false,{\"one\":1}]"; json j = json::parse(s); CHECK(json::accept(s));
*/ #include "catch.hpp" #include <nlohmann/json.hpp> using nlohmann::json; TEST_CASE("version information") { SECTION("meta()") { json j = json::meta(); CHECK(j["name"] == "JSON for Modern C++"); CHECK(j["copyright"] == "(C) 2013-2017 Niels Lohmann"); CHECK(j["url"] == "https://github.com/nlohmann/json"); CHECK(j["version"] == json( { {"string", "3.2.0"}, {"major", 3}, {"minor", 2}, {"patch", 0} })); CHECK(j.find("platform") != j.end()); CHECK(j.at("compiler").find("family") != j.at("compiler").end()); CHECK(j.at("compiler").find("version") != j.at("compiler").end()); CHECK(j.at("compiler").find("c++") != j.at("compiler").end()); } }