diff options
Diffstat (limited to 'test/suites/api/test_dump.c')
-rw-r--r-- | test/suites/api/test_dump.c | 48 |
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(); } |