diff options
| -rw-r--r-- | doc/reference/json-glib-sections.txt | 1 | ||||
| -rw-r--r-- | json-glib/json-node.c | 18 | ||||
| -rw-r--r-- | json-glib/json-parser.c | 14 | ||||
| -rw-r--r-- | json-glib/json-types.h | 2 | ||||
| -rw-r--r-- | tests/test-parser.c | 10 |
5 files changed, 38 insertions, 7 deletions
diff --git a/doc/reference/json-glib-sections.txt b/doc/reference/json-glib-sections.txt index 6872eaa..86a049c 100644 --- a/doc/reference/json-glib-sections.txt +++ b/doc/reference/json-glib-sections.txt @@ -116,6 +116,7 @@ json_node_get_string json_node_dup_string <SUBSECTION> +json_node_set_parent json_node_get_parent json_node_type_name json_node_get_value_type diff --git a/json-glib/json-node.c b/json-glib/json-node.c index e1e457a..a3562f6 100644 --- a/json-glib/json-node.c +++ b/json-glib/json-node.c @@ -485,6 +485,24 @@ json_node_type_name (JsonNode *node) } /** + * json_node_set_parent: + * @node: a #JsonNode + * @parent: the parent #JsonNode of @node + * + * Sets the parent #JsonNode of @node + * + * Since: 0.8 + */ +void +json_node_set_parent (JsonNode *node, + JsonNode *parent) +{ + g_return_if_fail (node != NULL); + + node->parent = parent; +} + +/** * json_node_get_parent: * @node: a #JsonNode * diff --git a/json-glib/json-parser.c b/json-glib/json-parser.c index df892de..6772931 100644 --- a/json-glib/json-parser.c +++ b/json-glib/json-parser.c @@ -445,7 +445,7 @@ json_parse_array (JsonParser *parser, } json_array_add_element (array, node); - node->parent = priv->current_node; + json_node_set_parent (node, priv->current_node); g_signal_emit (parser, parser_signals[ARRAY_ELEMENT], 0, array, @@ -486,7 +486,7 @@ json_parse_array (JsonParser *parser, } json_array_add_element (array, node); - node->parent = priv->current_node; + json_node_set_parent (node, priv->current_node); g_signal_emit (parser, parser_signals[ARRAY_ELEMENT], 0, array, @@ -515,7 +515,7 @@ json_parse_array (JsonParser *parser, } json_array_add_element (array, node); - node->parent = priv->current_node; + json_node_set_parent (node, priv->current_node); g_signal_emit (parser, parser_signals[ARRAY_ELEMENT], 0, array, @@ -622,7 +622,7 @@ json_parse_object (JsonParser *parser, } json_object_set_member (object, name, node); - node->parent = priv->current_node; + json_node_set_parent (node, priv->current_node); g_signal_emit (parser, parser_signals[OBJECT_MEMBER], 0, object, @@ -665,7 +665,7 @@ json_parse_object (JsonParser *parser, } json_object_set_member (object, name, node); - node->parent = priv->current_node; + json_node_set_parent (node, priv->current_node); g_signal_emit (parser, parser_signals[OBJECT_MEMBER], 0, object, @@ -697,8 +697,8 @@ json_parse_object (JsonParser *parser, } json_object_set_member (object, name, node); - node->parent = priv->current_node; - + json_node_set_parent (node, priv->current_node); + g_signal_emit (parser, parser_signals[OBJECT_MEMBER], 0, object, name); diff --git a/json-glib/json-types.h b/json-glib/json-types.h index 49e562c..3ea885f 100644 --- a/json-glib/json-types.h +++ b/json-glib/json-types.h @@ -131,6 +131,8 @@ JsonNode * json_node_copy (JsonNode *node); void json_node_free (JsonNode *node); JsonNodeType json_node_get_node_type (JsonNode *node); GType json_node_get_value_type (JsonNode *node); +void json_node_set_parent (JsonNode *node, + JsonNode *parent); JsonNode * json_node_get_parent (JsonNode *node); G_CONST_RETURN gchar *json_node_type_name (JsonNode *node); diff --git a/tests/test-parser.c b/tests/test-parser.c index ac22967..460b772 100644 --- a/tests/test-parser.c +++ b/tests/test-parser.c @@ -154,6 +154,7 @@ test_base_value (void) root = json_parser_get_root (parser); g_assert (root != NULL); + g_assert (json_node_get_parent (root) == NULL); if (g_test_verbose ()) g_print ("checking root node is of the desired type %s...\n", @@ -198,6 +199,7 @@ test_empty_array (void) g_print ("checking root node is an array...\n"); root = json_parser_get_root (parser); g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_ARRAY); + g_assert (json_node_get_parent (root) == NULL); array = json_node_get_array (root); g_assert (array != NULL); @@ -246,6 +248,7 @@ test_simple_array (void) g_print ("checking root node is an array...\n"); root = json_parser_get_root (parser); g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_ARRAY); + g_assert (json_node_get_parent (root) == NULL); array = json_node_get_array (root); g_assert (array != NULL); @@ -261,6 +264,7 @@ test_simple_array (void) g_type_name (test_simple_arrays[i].gtype)); node = json_array_get_element (array, test_simple_arrays[i].element); g_assert (node != NULL); + g_assert (json_node_get_parent (node) == root); g_assert_cmpint (JSON_NODE_TYPE (node), ==, test_simple_arrays[i].type); g_assert_cmpint (json_node_get_value_type (node), ==, test_simple_arrays[i].gtype); } @@ -305,6 +309,7 @@ test_nested_array (void) g_print ("checking root node is an array...\n"); root = json_parser_get_root (parser); g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_ARRAY); + g_assert (json_node_get_parent (root) == NULL); array = json_node_get_array (root); g_assert (array != NULL); @@ -348,7 +353,9 @@ test_empty_object (void) if (g_test_verbose ()) g_print ("checking root node is an object...\n"); root = json_parser_get_root (parser); + g_assert (json_node_get_parent (root) == NULL); g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_OBJECT); + g_assert (json_node_get_parent (root) == NULL); object = json_node_get_object (root); g_assert (object != NULL); @@ -397,6 +404,7 @@ test_simple_object (void) g_print ("checking root node is an object...\n"); root = json_parser_get_root (parser); g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_OBJECT); + g_assert (json_node_get_parent (root) == NULL); object = json_node_get_object (root); g_assert (object != NULL); @@ -412,6 +420,7 @@ test_simple_object (void) g_type_name (test_simple_objects[i].gtype)); node = json_object_get_member (object, test_simple_objects[i].member); g_assert (node != NULL); + g_assert (json_node_get_parent (node) == root); g_assert_cmpint (JSON_NODE_TYPE (node), ==, test_simple_objects[i].type); g_assert_cmpint (json_node_get_value_type (node), ==, test_simple_objects[i].gtype); } @@ -456,6 +465,7 @@ test_nested_object (void) g_print ("checking root node is an object...\n"); root = json_parser_get_root (parser); g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_OBJECT); + g_assert (json_node_get_parent (root) == NULL); object = json_node_get_object (root); g_assert (object != NULL); |
