aboutsummaryrefslogtreecommitdiffstats
path: root/libtests/json_handler.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-20 14:53:53 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-30 19:11:03 +0100
commit1db0a7ffcee6f6ae6bd3298a960665378d304fa1 (patch)
tree12c0f9df760943dd323b5b0286c1da7aaaaf0728 /libtests/json_handler.cc
parentacf8d18b6e41ec9786bd059795731e92998620ab (diff)
downloadqpdf-1db0a7ffcee6f6ae6bd3298a960665378d304fa1.tar.zst
JSONHandler: rework dictionary and array handlers
Diffstat (limited to 'libtests/json_handler.cc')
-rw-r--r--libtests/json_handler.cc44
1 files changed, 30 insertions, 14 deletions
diff --git a/libtests/json_handler.cc b/libtests/json_handler.cc
index d5e6aea3..7f6349f9 100644
--- a/libtests/json_handler.cc
+++ b/libtests/json_handler.cc
@@ -28,6 +28,13 @@ static void print_json(std::string const& path, JSON value)
std::cout << path << ": json: " << value.unparse() << std::endl;
}
+static JSONHandler::void_handler_t make_print_message(std::string msg)
+{
+ return [msg](std::string const& path) {
+ std::cout << path << ": json: " << msg << std::endl;
+ };
+}
+
static void test_scalar()
{
std::cout << "-- scalar --" << std::endl;
@@ -40,41 +47,50 @@ static void test_scalar()
static std::shared_ptr<JSONHandler> make_all_handler()
{
auto h = std::make_shared<JSONHandler>();
- auto& m = h->addDictHandlers();
+ h->addDictHandlers(
+ make_print_message("dict begin"),
+ make_print_message("dict end"));
auto h1 = std::make_shared<JSONHandler>();
h1->addStringHandler(print_string);
- m["one"] = h1;
+ h->addDictKeyHandler("one", h1);
auto h2 = std::make_shared<JSONHandler>();
h2->addNumberHandler(print_number);
- m["two"] = h2;
+ h->addDictKeyHandler("two", h2);
auto h3 = std::make_shared<JSONHandler>();
h3->addBoolHandler(print_bool);
- m["three"] = h3;
+ h->addDictKeyHandler("three", h3);
auto h4 = std::make_shared<JSONHandler>();
h4->addAnyHandler(print_json);
- m["four"] = h4;
- m["phour"] = h4; // share h4
+ h->addDictKeyHandler("four", h4);
+ h->addDictKeyHandler("phour", h4); // share h4
auto h5 = std::make_shared<JSONHandler>();
// Allow to be either string or bool
h5->addBoolHandler(print_bool);
h5->addStringHandler(print_string);
h5->addNullHandler(print_null);
auto h5s = std::make_shared<JSONHandler>();
- m["five"] = h5s;
- h5s->addArrayHandler(h5);
+ h->addDictKeyHandler("five", h5s);
+ h5s->addArrayHandlers(
+ make_print_message("array begin"),
+ make_print_message("array end"),
+ h5);
auto h6 = std::make_shared<JSONHandler>();
- auto& m6 = h6->addDictHandlers();
+ h6->addDictHandlers(
+ make_print_message("dict begin"),
+ make_print_message("dict end"));
auto h6a = std::make_shared<JSONHandler>();
- m6["a"] = h6a;
- auto& m6a = h6a->addDictHandlers();
+ h6->addDictKeyHandler("a", h6a);
+ h6a->addDictHandlers(
+ make_print_message("dict begin"),
+ make_print_message("dict end"));
auto h6ab = std::make_shared<JSONHandler>();
- m6a["b"] = h6ab;
+ h6a->addDictKeyHandler("b", h6ab);
auto h6ax = std::make_shared<JSONHandler>();
h6ax->addAnyHandler(print_json);
h6a->addFallbackDictHandler(h6ax);
- m6["b"] = h6ab; // share
+ h6->addDictKeyHandler("b", h6ab); // share
h6ab->addStringHandler(print_string);
- m["six"] = h6;
+ h->addDictKeyHandler("six", h6);
return h;
}