aboutsummaryrefslogtreecommitdiffstats
path: root/libtests/json.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-19 15:31:28 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-30 19:11:03 +0100
commit37105710ee0b332a3020d4b3220c95b8f4267555 (patch)
treeee4b520b1c141033ba16ba3696def57fc90f60fa /libtests/json.cc
parenta6df6fdaf724ed5fc6f7e8c021f7804bd5a9c0e2 (diff)
downloadqpdf-37105710ee0b332a3020d4b3220c95b8f4267555.tar.zst
Implement JSONHandler for recursively processing JSON
Diffstat (limited to 'libtests/json.cc')
-rw-r--r--libtests/json.cc39
1 files changed, 38 insertions, 1 deletions
diff --git a/libtests/json.cc b/libtests/json.cc
index 7bea5589..006f00cf 100644
--- a/libtests/json.cc
+++ b/libtests/json.cc
@@ -1,7 +1,7 @@
#include <qpdf/JSON.hh>
#include <qpdf/QPDFObjectHandle.hh>
#include <iostream>
-#include <assert.h>
+#include <cassert>
static void check(JSON const& j, std::string const& exp)
{
@@ -20,12 +20,25 @@ static void test_main()
"\\u0003\\t\\b\\r\\n<4>\"");
JSON jnull = JSON::makeNull();
check(jnull, "null");
+ assert(jnull.isNull());
+ std::string value;
+ assert(! jnull.getNumber(value));
JSON jarr = JSON::makeArray();
check(jarr, "[]");
JSON jstr2 = JSON::makeString("a\tb");
+ assert(jstr2.getString(value));
+ assert(value == "a\tb");
+ assert(! jstr2.getNumber(value));
JSON jint = JSON::makeInt(16059);
JSON jdouble = JSON::makeReal(3.14159);
JSON jexp = JSON::makeNumber("2.1e5");
+ JSON jbool1 = JSON::makeBool(true);
+ JSON jbool2 = JSON::makeBool(false);
+ bool bvalue = false;
+ assert(jbool1.getBool(bvalue));
+ assert(bvalue);
+ assert(jbool2.getBool(bvalue));
+ assert(! bvalue);
jarr.addArrayElement(jstr2);
jarr.addArrayElement(jnull);
jarr.addArrayElement(jint);
@@ -39,6 +52,18 @@ static void test_main()
" 3.14159,\n"
" 2.1e5\n"
"]");
+ std::vector<std::string> avalue;
+ assert(jarr.forEachArrayItem([&avalue](JSON j) {
+ avalue.push_back(j.unparse());
+ }));
+ std::vector<std::string> xavalue = {
+ "\"a\\tb\"",
+ "null",
+ "16059",
+ "3.14159",
+ "2.1e5",
+ };
+ assert(avalue == xavalue);
JSON jmap = JSON::makeDictionary();
check(jmap, "{}");
jmap.addDictionaryMember("b", jstr2);
@@ -73,6 +98,18 @@ static void test_main()
check(QPDFObjectHandle::newReal(".34").getJSON(), "0.34");
check(QPDFObjectHandle::newReal("-0.56").getJSON(), "-0.56");
check(QPDFObjectHandle::newReal("-.78").getJSON(), "-0.78");
+ JSON jmap2 = JSON::parse(R"({"a": 1, "b": "two", "c": [true]})");
+ std::map<std::string, std::string> dvalue;
+ assert(jmap2.forEachDictItem([&dvalue]
+ (std::string const& k, JSON j) {
+ dvalue[k] = j.unparse();
+ }));
+ std::map<std::string, std::string> xdvalue = {
+ {"a", "1"},
+ {"b", "\"two\""},
+ {"c", "[\n true\n]"},
+ };
+ assert(dvalue == xdvalue);
}
static void check_schema(JSON& obj, JSON& schema, bool exp,