From b6a2b5d3c184003f259abbb58536f3466b1ee97f Mon Sep 17 00:00:00 2001 From: m-holger Date: Sun, 14 Jan 2024 16:38:29 +0000 Subject: Handle default-constructed JSON objects --- libtests/json.cc | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'libtests') diff --git a/libtests/json.cc b/libtests/json.cc index f265f6f6..67c8534f 100644 --- a/libtests/json.cc +++ b/libtests/json.cc @@ -2,8 +2,10 @@ #include #include +#include #include #include + #include static void @@ -131,6 +133,51 @@ test_main() " \"blob\": \"AQIDBAX//v38+w==\",\n" " \"normal\": \"string\"\n" "}"); + + // Check default constructed JSON object (order as per JSON.hh). + JSON uninitialized; + std::string ws; + auto pl = Pl_String ("", nullptr, ws); + uninitialized.write(&pl); + assert(ws == "null"); + assert(uninitialized.unparse() == "null"); + try { + uninitialized.addDictionaryMember("key", jarr); + assert(false); + } catch (std::runtime_error&) { + } + assert(jmap.addDictionaryMember("42", uninitialized).isNull()); + try { + uninitialized.addArrayElement(jarr); + assert(false); + } catch (std::runtime_error&) { + } + assert(jarr.addArrayElement(uninitialized).isNull()); + assert(!uninitialized.isArray()); + assert(!uninitialized.isDictionary()); + try { + uninitialized.checkDictionaryKeySeen("key"); + assert(false); + } catch (std::logic_error&) { + } + std::string st_out = "unchanged"; + assert(!uninitialized.getString(st_out)); + assert(!uninitialized.getNumber(st_out)); + bool b_out = true; + assert(!uninitialized.getBool(b_out)); + assert(b_out && st_out == "unchanged"); + assert(!uninitialized.isNull()); + assert(uninitialized.getDictItem("42").isNull()); + assert(!uninitialized.forEachDictItem([](auto k, auto v) {})); + assert(!uninitialized.forEachArrayItem([](auto v) {})); + std::list e; + assert(!uninitialized.checkSchema(JSON(), 0, e)); + assert(!uninitialized.checkSchema(JSON(), e)); + assert(e.empty()); + uninitialized.setStart(0); + uninitialized.setEnd(0); + assert(uninitialized.getStart() == 0); + assert(uninitialized.getEnd() == 0); } static void -- cgit v1.2.3-54-g00ecf