Browse Source

Use json_visit() to clear the serializer data set when parsing so the output from test_parse reflects the actual values parsed.

tags/json-c-0.13-20171207
Eric Haszlakiewicz 9 years ago
parent
commit
33339ae595
2 changed files with 51 additions and 0 deletions
  1. +46
    -0
      tests/test_parse.c
  2. +5
    -0
      tests/test_parse.expected

+ 46
- 0
tests/test_parse.c View File

@@ -6,6 +6,7 @@


#include "json.h" #include "json.h"
#include "json_tokener.h" #include "json_tokener.h"
#include "json_visit.h"


static void test_basic_parse(void); static void test_basic_parse(void);
static void test_verbose_parse(void); static void test_verbose_parse(void);
@@ -24,6 +25,9 @@ int main(void)
puts(separator); puts(separator);
} }


static json_c_visit_userfunc clear_serializer;
static void do_clear_serializer(json_object *jso);

static void test_basic_parse() static void test_basic_parse()
{ {
json_object *new_obj; json_object *new_obj;
@@ -157,6 +161,48 @@ static void test_basic_parse()
new_obj = json_tokener_parse("{ \"abc\": 12, \"foo\": \"bar\", \"bool0\": false, \"bool1\": true, \"arr\": [ 1, 2, 3, null, 5 ] }"); new_obj = json_tokener_parse("{ \"abc\": 12, \"foo\": \"bar\", \"bool0\": false, \"bool1\": true, \"arr\": [ 1, 2, 3, null, 5 ] }");
printf("new_obj.to_string()=%s\n", json_object_to_json_string(new_obj)); printf("new_obj.to_string()=%s\n", json_object_to_json_string(new_obj));
json_object_put(new_obj); json_object_put(new_obj);

new_obj = json_tokener_parse("{ \"abc\": \"blue\nred\\ngreen\" }");
printf("new_obj.to_string()=%s\n", json_object_to_json_string(new_obj));
json_object_put(new_obj);

new_obj = json_tokener_parse("[0e]");
do_clear_serializer(new_obj);
printf("new_obj.to_string()=%s\n", json_object_to_json_string(new_obj));
json_object_put(new_obj);

new_obj = json_tokener_parse("[0e+]");
do_clear_serializer(new_obj);
printf("new_obj.to_string()=%s\n", json_object_to_json_string(new_obj));
json_object_put(new_obj);

new_obj = json_tokener_parse("[0e+-1]");
do_clear_serializer(new_obj);
printf("new_obj.to_string()=%s\n", json_object_to_json_string(new_obj));
json_object_put(new_obj);

new_obj = json_tokener_parse("[18446744073709551616]");
do_clear_serializer(new_obj);
printf("new_obj.to_string()=%s\n", json_object_to_json_string(new_obj));
json_object_put(new_obj);
}

// Clear the re-serialization information that the tokener
// saves to ensure that the output reflects the actual
// values we parsed, rather than just the original input.
static void do_clear_serializer(json_object *jso)
{
json_c_visit(jso, 0, clear_serializer, NULL);
}

static int clear_serializer(json_object *jso, int flags,
json_object *parent_jso,
const char *jso_key,
size_t *jso_index, void *userarg)
{
if (jso)
json_object_set_serializer(jso, NULL, NULL, NULL);
return JSON_C_VISIT_RETURN_CONTINUE;
} }


static void test_verbose_parse() static void test_verbose_parse()


+ 5
- 0
tests/test_parse.expected View File

@@ -30,6 +30,11 @@ new_obj.to_string()={ "foo": "bar" }
new_obj.to_string()={ "foo": "bar", "baz": null, "bool0": true } new_obj.to_string()={ "foo": "bar", "baz": null, "bool0": true }
new_obj.to_string()={ "foo": [ null, "foo" ] } new_obj.to_string()={ "foo": [ null, "foo" ] }
new_obj.to_string()={ "abc": 12, "foo": "bar", "bool0": false, "bool1": true, "arr": [ 1, 2, 3, null, 5 ] } new_obj.to_string()={ "abc": 12, "foo": "bar", "bool0": false, "bool1": true, "arr": [ 1, 2, 3, null, 5 ] }
new_obj.to_string()={ "abc": "blue\nred\ngreen" }
new_obj.to_string()=[ 0 ]
new_obj.to_string()=[ 0 ]
new_obj.to_string()=null
new_obj.to_string()=[ 9223372036854775807 ]
================================== ==================================
json_tokener_parse_versbose() OK json_tokener_parse_versbose() OK
================================== ==================================


Loading…
Cancel
Save