/tests/test_parse
/tests/test_cast
/tests/test_charcase
+/tests/test_double_serializer
/tests/test_locale
/tests/test_null
/tests/test_printbuf
static json_object_to_json_string_fn json_object_object_to_json_string;
static json_object_to_json_string_fn json_object_boolean_to_json_string;
+static json_object_to_json_string_fn json_object_double_to_json_string_default;
static json_object_to_json_string_fn json_object_int_to_json_string;
static json_object_to_json_string_fn json_object_string_to_json_string;
static json_object_to_json_string_fn json_object_array_to_json_string;
jso->_to_json_string = &json_object_boolean_to_json_string;
break;
case json_type_double:
- jso->_to_json_string = &json_object_double_to_json_string;
+ jso->_to_json_string = &json_object_double_to_json_string_default;
break;
case json_type_int:
jso->_to_json_string = &json_object_int_to_json_string;
/* json_object_double */
-int json_object_double_to_json_string(struct json_object* jso,
- struct printbuf *pb,
- int level,
- int flags)
+static int json_object_double_to_json_string_format(struct json_object* jso,
+ struct printbuf *pb,
+ int level,
+ int flags,
+ const char *format)
{
char buf[128], *p, *q;
int size;
size = snprintf(buf, sizeof(buf), "-Infinity");
else
size = snprintf(buf, sizeof(buf),
- jso->_userdata ? (const char*) jso->_userdata : "%.17g", jso->o.c_double);
+ format ? format : "%.17g", jso->o.c_double);
p = strchr(buf, ',');
if (p) {
return size;
}
+static int json_object_double_to_json_string_default(struct json_object* jso,
+ struct printbuf *pb,
+ int level,
+ int flags)
+{
+ return json_object_double_to_json_string_format(jso, pb, level, flags,
+ NULL);
+}
+
+int json_object_double_to_json_string(struct json_object* jso,
+ struct printbuf *pb,
+ int level,
+ int flags)
+{
+ return json_object_double_to_json_string_format(jso, pb, level, flags,
+ jso->_userdata);
+}
+
struct json_object* json_object_new_double(double d)
{
struct json_object *jso = json_object_new(json_type_double);
if (!jso)
return NULL;
- jso->_to_json_string = &json_object_double_to_json_string;
+ jso->_to_json_string = &json_object_double_to_json_string_default;
jso->o.c_double = d;
return jso;
}
TESTS+= test_parse_int64.test
TESTS+= test_null.test
TESTS+= test_cast.test
+TESTS+= test_double_serializer.test
TESTS+= test_parse.test
TESTS+= test_locale.test
TESTS+= test_charcase.test
check_PROGRAMS += $(TESTS:.test=)
# Note: handled by test1.test
-check_PROGRAMS += test1Formatted
+check_PROGRAMS += test1Formatted
test1Formatted_SOURCES = test1.c parse_flags.c
test1Formatted_CPPFLAGS = -DTEST_FORMATTED
--- /dev/null
+/*
+* Tests if the format string for double serialization is handled correctly
+*/
+
+#include <stdio.h>
+#include "config.h"
+
+#include "json_object.h"
+#include "json_object_private.h"
+
+int main()
+{
+ struct json_object *obj = json_object_new_double(0.5);
+
+ printf("Test default serializer:\n");
+ printf("obj.to_string(standard)=%s\n", json_object_to_json_string(obj));
+
+ printf("Test default serializer with custom userdata:\n");
+ obj->_userdata = "test";
+ printf("obj.to_string(userdata)=%s\n", json_object_to_json_string(obj));
+
+ printf("Test explicit serializer with custom userdata:\n");
+ json_object_set_serializer(obj, json_object_double_to_json_string, "test", NULL);
+ printf("obj.to_string(custom)=%s\n", json_object_to_json_string(obj));
+
+ printf("Test reset serializer:\n");
+ json_object_set_serializer(obj, NULL, NULL, NULL);
+ printf("obj.to_string(reset)=%s\n", json_object_to_json_string(obj));
+
+ json_object_put(obj);
+}
--- /dev/null
+Test default serializer:
+obj.to_string(standard)=0.5
+Test default serializer with custom userdata:
+obj.to_string(userdata)=0.5
+Test explicit serializer with custom userdata:
+obj.to_string(custom)=test
+Test reset serializer:
+obj.to_string(reset)=0.5
--- /dev/null
+#!/bin/sh
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir="${0%/*}"
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+fi
+. "$srcdir/test-defs.sh"
+
+run_output_test test_double_serializer
+exit $?