aboutsummaryrefslogtreecommitdiff
path: root/test/suites/api/test_dump.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/suites/api/test_dump.c')
-rw-r--r--test/suites/api/test_dump.c48
1 files changed, 45 insertions, 3 deletions
diff --git a/test/suites/api/test_dump.c b/test/suites/api/test_dump.c
index e528031..8d59d40 100644
--- a/test/suites/api/test_dump.c
+++ b/test/suites/api/test_dump.c
@@ -5,8 +5,13 @@
* it under the terms of the MIT license. See LICENSE for details.
*/
+#include "jansson_private_config.h"
+
#include <jansson.h>
#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
#include "util.h"
static int encode_null_callback(const char *buffer, size_t size, void *data)
@@ -28,6 +33,11 @@ static void encode_null()
if(json_dumpf(NULL, stderr, JSON_ENCODE_ANY) != -1)
fail("json_dumpf didn't fail for NULL");
+#ifdef HAVE_UNISTD_H
+ if(json_dumpfd(NULL, STDERR_FILENO, JSON_ENCODE_ANY) != -1)
+ fail("json_dumpfd didn't fail for NULL");
+#endif
+
/* Don't test json_dump_file to avoid creating a file */
if(json_dump_callback(NULL, encode_null_callback, NULL, JSON_ENCODE_ANY) != -1)
@@ -127,14 +137,15 @@ static void encode_other_than_array_or_object()
* succeed if the JSON_ENCODE_ANY flag is used */
json_t *json;
- FILE *fp = NULL;
char *result;
json = json_string("foo");
if(json_dumps(json, 0) != NULL)
fail("json_dumps encoded a string!");
- if(json_dumpf(json, fp, 0) == 0)
+ if(json_dumpf(json, NULL, 0) == 0)
fail("json_dumpf encoded a string!");
+ if(json_dumpfd(json, -1, 0) == 0)
+ fail("json_dumpfd encoded a string!");
result = json_dumps(json, JSON_ENCODE_ANY);
if(!result || strcmp(result, "\"foo\"") != 0)
@@ -146,8 +157,10 @@ static void encode_other_than_array_or_object()
json = json_integer(42);
if(json_dumps(json, 0) != NULL)
fail("json_dumps encoded an integer!");
- if(json_dumpf(json, fp, 0) == 0)
+ if(json_dumpf(json, NULL, 0) == 0)
fail("json_dumpf encoded an integer!");
+ if(json_dumpfd(json, -1, 0) == 0)
+ fail("json_dumpfd encoded an integer!");
result = json_dumps(json, JSON_ENCODE_ANY);
if(!result || strcmp(result, "42") != 0)
@@ -237,6 +250,34 @@ static void dumpb()
json_decref(obj);
}
+static void dumpfd()
+{
+#ifdef HAVE_UNISTD_H
+ int fds[2] = {-1, -1};
+ json_t *a, *b;
+
+ if(pipe(fds))
+ fail("pipe() failed");
+
+ a = json_pack("{s:s}", "foo", "bar");
+
+ if(json_dumpfd(a, fds[1], 0))
+ fail("json_dumpfd() failed");
+ close(fds[1]);
+
+ b = json_loadfd(fds[0], 0, NULL);
+ if (!b)
+ fail("json_loadfd() failed");
+ close(fds[0]);
+
+ if (!json_equal(a, b))
+ fail("json_equal() failed for fd test");
+
+ json_decref(a);
+ json_decref(b);
+#endif
+}
+
static void run_tests()
{
encode_null();
@@ -247,4 +288,5 @@ static void run_tests()
encode_nul_byte();
dump_file();
dumpb();
+ dumpfd();
}