diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2017-11-14 17:16:40 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2017-11-14 17:16:40 +0000 |
commit | 5b816ff8df9e563c1e9c3ae05ee97d46924f9b40 (patch) | |
tree | a55205f1519a5f563f70df6ae276b5510acffe4e /json-glib/tests/object.c | |
parent | ce0f83a46317482255e5e6afe9b9d57422c6bffb (diff) | |
download | json-glib-5b816ff8df9e563c1e9c3ae05ee97d46924f9b40.tar.gz |
Add with_default() variant for JsonObject getters
When using the typed getters for JsonObject, the existing API will
automatically fail if the member requested is not present. This is
generally good practice, because JSON data typically does not have a
schema, and thus is has to be validated "on the go"; a JSON object
member that contains `null`, or `0`, or `false`, is indistinguishable
from a JSON object member that does not exist, so we cannot simply
return a scalar value and be done with it.
We can provide an escape hatch, though, for the crowd writing parsers
for JSON data; by using Python as the model, we can add methods that
take a default value as a parameter, and return it as a fallback value
if the requested object member does not exist, or if it's set to `null`.
Diffstat (limited to 'json-glib/tests/object.c')
-rw-r--r-- | json-glib/tests/object.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/json-glib/tests/object.c b/json-glib/tests/object.c index 03a478c..772265a 100644 --- a/json-glib/tests/object.c +++ b/json-glib/tests/object.c @@ -71,6 +71,25 @@ test_set_member (void) } static void +test_get_member_default (void) +{ + JsonObject *object = json_object_new (); + + json_object_set_int_member (object, "foo", 42); + json_object_set_boolean_member (object, "bar", TRUE); + json_object_set_string_member (object, "hello", "world"); + + g_assert_cmpint (json_object_get_int_member_with_default (object, "foo", 47), ==, 42); + g_assert_true (json_object_get_boolean_member_with_default (object, "bar", FALSE)); + g_assert_cmpstr (json_object_get_string_member_with_default (object, "hello", "wisconsin"), ==, "world"); + + g_assert_cmpint (json_object_get_int_member_with_default (object, "no", 4), ==, 4); + g_assert_cmpstr (json_object_get_string_member_with_default (object, "doesNotExist", "indeed"), ==, "indeed"); + + json_object_unref (object); +} + +static void test_remove_member (void) { JsonObject *object = json_object_new (); @@ -204,6 +223,7 @@ main (int argc, g_test_add_func ("/object/empty-object", test_empty_object); g_test_add_func ("/object/add-member", test_add_member); g_test_add_func ("/object/set-member", test_set_member); + g_test_add_func ("/object/get-member-default", test_get_member_default); g_test_add_func ("/object/remove-member", test_remove_member); g_test_add_func ("/object/foreach-member", test_foreach_member); g_test_add_func ("/object/iter", test_iter); |