#include #include #include #include #include "json.h" #include "unit.h" #define CMP_STR "{\"string\":\"hello\",\"number\":69,\"boolean\":true,\"null\":" \ "null,\"null\":null,\"array\":[\"hello\",\"world\",\"it's\",\"max\"," \ "\"flow\",\"with\",\"ryhmes\",\"so-so\",0,-100,false,null],\"object\":{\"hello\":" \ "\"dipshit\"}}" int tests_json_write(int argc, char **argv) { jsonkv_dynarr_t map = dynarr_initi(jsonkv_dynarr_t); jsonkv_t kv; kv = (jsonkv_t){ .key = "string", .val = json_createstr("hello") }; dynarr_push(map, kv); kv = (jsonkv_t){ .key = "number", .val = json_createint(69) }; dynarr_push(map, kv); kv = (jsonkv_t){ .key = "boolean", .val = json_createbool(true) }; dynarr_push(map, kv); kv = (jsonkv_t){ .key = "null", .val = json_createnull() }; dynarr_push(map, kv); dynarr_push(map, kv); jsonval_dynarr_t subarr = dynarr_initi(jsonval_dynarr_t); dynarr_push(subarr, json_createstr("hello")); dynarr_push(subarr, json_createstr("world")); dynarr_push(subarr, json_createstr("it's")); dynarr_push(subarr, json_createstr("max")); dynarr_push(subarr, json_createstr("flow")); dynarr_push(subarr, json_createstr("with")); dynarr_push(subarr, json_createstr("ryhmes")); dynarr_push(subarr, json_createstr("so-so")); dynarr_push(subarr, json_createint(0)); dynarr_push(subarr, json_createint(-100)); dynarr_push(subarr, json_createbool(false)); dynarr_push(subarr, json_createnull()); jsonval_t j_subarr = json_createarr(subarr); kv = (jsonkv_t){ .key = "array", .val = j_subarr }; dynarr_push(map, kv); jsonkv_dynarr_t submap = dynarr_initi(jsonkv_dynarr_t); kv = (jsonkv_t){ .key = "hello", .val = json_createstr("dipshit") }; dynarr_push(submap, kv); kv = (jsonkv_t){ .key = "object", .val = json_createobj(submap) }; dynarr_push(map, kv); jsonval_t j_map = json_createobj(map); int fds[2] = { 11, 12 }; if (pipe(fds) < 0) { fprintf(stderr, "pipe() failed: %s\n", strerror(errno)); return 1; } FILE *writer = fdopen(fds[1], "w"); if (writer == NULL) { fprintf(stderr, "pipe() failed: %s\n", strerror(errno)); return 1; } json_write(writer, &j_map); json_destroy(&j_map); char buf[1000]; fflush(writer); int cnt = read(fds[0], &buf, sizeof(buf)); if (cnt < 0) { fprintf(stderr, "read() failed: %s\n", strerror(errno)); return 1; } buf[cnt] = '\0'; printf("cmp: %s\n", CMP_STR); printf("buf: %s\n", buf); chi_assert("test strings do not match", strcmp(buf, CMP_STR) == 0); fclose(writer); close(fds[0]); return 0; }