| 703         CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 703         CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
| 704     } | 704     } | 
| 705     cx_testing_allocator_destroy(&talloc); | 705     cx_testing_allocator_destroy(&talloc); | 
| 706 } | 706 } | 
| 707 | 707 | 
|  | 708 CX_TEST(test_json_write_default_format) { | 
|  | 709     CxTestingAllocator talloc; | 
|  | 710     cx_testing_allocator_init(&talloc); | 
|  | 711     CxAllocator *allocator = &talloc.base; | 
|  | 712     CX_TEST_DO { | 
|  | 713         // expected value | 
|  | 714         cxstring expected = CX_STR("{\"bool\":false,\"nested\":{\"floats\":[3.1415,47.11,8.15],\"ints\":[4,8,15,16,23,42],\"literals\":[true,null,false],\"string\":\"test\"},\"num\":47.11,\"strings\":[\"hello\",\"world\"]}"); | 
|  | 715 | 
|  | 716         // create the value | 
|  | 717         CxJsonValue *obj = cxJsonCreateObj(allocator); | 
|  | 718         cxJsonObjPutLiteral(obj, CX_STR("bool"), CX_JSON_FALSE); | 
|  | 719         cxJsonObjPutNumber(obj, CX_STR("num"), 47.11); | 
|  | 720         CxJsonValue *strings = cxJsonObjPutArr(obj, CX_STR("strings")); | 
|  | 721         cxJsonArrAddCxStrings(strings, (cxstring[]) {CX_STR("hello"), CX_STR("world")}, 2); | 
|  | 722         CxJsonValue *nested = cxJsonObjPutObj(obj, CX_STR("nested")); | 
|  | 723         cxJsonObjPutString(nested, CX_STR("string"), "test"); | 
|  | 724         cxJsonArrAddNumbers(cxJsonObjPutArr(nested, CX_STR("floats")), | 
|  | 725             (double[]){3.1415, 47.11, 8.15}, 3); | 
|  | 726         cxJsonArrAddLiterals(cxJsonObjPutArr(nested, CX_STR("literals")), | 
|  | 727                     (CxJsonLiteral[]){CX_JSON_TRUE, CX_JSON_NULL, CX_JSON_FALSE}, 3); | 
|  | 728         cxJsonArrAddIntegers(cxJsonObjPutArr(nested, CX_STR("ints")), | 
|  | 729             (int64_t[]){4, 8, 15, 16, 23, 42}, 6); | 
|  | 730 | 
|  | 731         // write it to a buffer | 
|  | 732         CxBuffer buf; | 
|  | 733         cxBufferInit(&buf, NULL, 256, NULL, CX_BUFFER_DEFAULT); | 
|  | 734         int result = cxJsonWrite(&buf, obj, (cx_write_func) cxBufferWrite, NULL); | 
|  | 735         CX_TEST_ASSERT(result == 0); | 
|  | 736 | 
|  | 737         // compare the string | 
|  | 738         CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), expected)); | 
|  | 739 | 
|  | 740         // destroy everything | 
|  | 741         cxBufferDestroy(&buf); | 
|  | 742         cxJsonValueFree(obj); | 
|  | 743         CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); | 
|  | 744     } | 
|  | 745     cx_testing_allocator_destroy(&talloc); | 
|  | 746 } | 
|  | 747 | 
| 708 CxTestSuite *cx_test_suite_json(void) { | 748 CxTestSuite *cx_test_suite_json(void) { | 
| 709     CxTestSuite *suite = cx_test_suite_new("json"); | 749     CxTestSuite *suite = cx_test_suite_new("json"); | 
| 710 | 750 | 
| 711     cx_test_register(suite, test_json_init_default); | 751     cx_test_register(suite, test_json_init_default); | 
| 712     cx_test_register(suite, test_json_simple_object); | 752     cx_test_register(suite, test_json_simple_object); | 
| 721     cx_test_register(suite, test_json_multiple_values); | 761     cx_test_register(suite, test_json_multiple_values); | 
| 722     cx_test_register(suite, test_json_array_iterator); | 762     cx_test_register(suite, test_json_array_iterator); | 
| 723     cx_test_register(suite, test_json_allocator); | 763     cx_test_register(suite, test_json_allocator); | 
| 724     cx_test_register(suite, test_json_allocator_parse_error); | 764     cx_test_register(suite, test_json_allocator_parse_error); | 
| 725     cx_test_register(suite, test_json_create_value); | 765     cx_test_register(suite, test_json_create_value); | 
|  | 766     cx_test_register(suite, test_json_write_default_format); | 
| 726 | 767 | 
| 727     return suite; | 768     return suite; | 
| 728 } | 769 } | 
| 729 | 770 |