tests/test_json.c

changeset 1072
c89283cd559b
parent 1063
e453e717876e
child 1075
0cc4b63a0ae0
equal deleted inserted replaced
1071:028cb6d22197 1072:c89283cd559b
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

mercurial